'use strict';
module.exports = () => {
  return async function errorHandler(ctx, next) {
    try {
      await next();
    } catch (err) {
      const status = err.status || 500;
      // 生产环境时 500 错误的详细错误内容不返回给客户端，因为可能包含敏感信息
      const error = status === 500 && ctx.app.config.env === 'prod'
        ? '未知异常'
        : err.stack ? err.stack : err;
      ctx.logger.error(`统一捕获异常信息 err: ${err.stack ? err.stack : err}`);
      ctx.body = {
        result: 500,
        error,
      };
      if (status === 422) {
        ctx.body = {
          result: 422,
          msg   : err.message,
        };
      }
      ctx.status = status;
    }
  };
};
